/**
 * 
 */
package com.monkeyboy.search.solr;

import java.io.IOException;
import java.util.UUID;

import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrInputDocument;

/**
 * 作用：<br>
 * solr的增上改查
 * 
 * @author Gavin<br>
 */
public class SolrjCRUD {
	public static void main(String[] args) {
		// 添加或者更新索引 如果ID值相等就会更新，如果没有就会新增（统一都是update操作）
		// addOrUpdate();
		// 删除索引
		deleteIndex();
	}

	/**
	 * 作用：</br>
	 *
	 * @Author Gavin</br>
	 *         </br>
	 *         2019年8月10日
	 */
	private static void deleteIndex() {
		try {
			// 通过Solrj进行索引的删除
			// [1]获取连接
			HttpSolrClient client = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/article")
					.withConnectionTimeout(10000).build();
			// [2]通过id删除
			// client.deleteById("667472b5-33d4-46a3-bc7f-e7497ec81565");
			// client.deleteByQuery("title:小米5");
			client.deleteByQuery("locality:1641477102360330240");
			// [3]提交
			client.commit();
			// [4]关闭资源
			client.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

	/**
	 * 作用：</br>
	 * 
	 * @throws IOException
	 * @throws SolrServerException
	 *
	 * @Author Gavin</br>
	 *         </br>
	 *         2019年8月10日
	 */
	private static void addOrUpdate() {
		try {

			// TODO Auto-generated method stub
			// 创建solrClient同时指定超时时间，不指定走默认配置
			HttpSolrClient client = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/article")
					.withConnectionTimeout(10000).build();

			// [2]创建文档doc,一个文档实例代表一条记录
			SolrInputDocument doc = new SolrInputDocument();
			// [3]添加内容，指定列或者列值的信息
			String str = UUID.randomUUID().toString();
			System.out.println(str);
			doc.addField("id", str);
			doc.addField("title", "小米16G红色");
			doc.addField("price", "1000");
			doc.addField("locality", "1641477102360330240");
			doc.addField("create_date", "2019-03-19 16:00:00");
			// [4]添加到client
			client.add(doc);
			// [5] 索引文档必须commit
			client.commit();
			// 注意：通过Solrj进行索引的添加或更新( id存在则更新不存在则添加)
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}
